--------------------------------------------------------------------------------
-- G15 スキル自動ローテーション スクリプト（LGS専用・シンプル版）
--------------------------------------------------------------------------------

-- 【重要】マウスのボタンイベントを確実に拾うための有効化
EnablePrimaryMouseButtonEvents(true)

-- ==========================================
-- G15 スキル回し用設定（ミリ秒）
-- ==========================================
-- クールダウン (CT)
local CT_key2 = 24020
local CT_key4 = 11020
local CT_key1 = 5020
local CT_key5 = 9020
local CT_key3 = 9020

-- キャストタイム（硬直・切り替わり制限時間）
local Cast_key2 = 477
local Cast_key4 = 1360
local Cast_key1 = 960
local Cast_key5 = 1227
local Cast_key3 = 1097

-- 状態管理用変数
local CD_key2 = 0
local CD_key4 = 0
local CD_key1 = 0
local CD_key5 = 0
local CD_key3 = 0

local CastEndTick = 0             -- キャスト硬直終了予定時刻


--------------------------------------------------------------------------------
-- イベントハンドラ
--------------------------------------------------------------------------------
function OnEvent(event, arg)
    local currentTick = GetRunningTime()

    -- ==================================================================
    -- 【マウスボタンが押されたイベント】
    -- ==================================================================
    if (event == "MOUSE_BUTTON_PRESSED") then
        
        -- ==================================================================
        -- 【ボタン 15 の処理】：5スキル自動ローテーション（3回送信仕様）
        -- ==================================================================
        if (arg == 15) then
            -- キャストタイム中は一切のキー送信を受け付けない
            if (currentTick < CastEndTick) then
                return
            end

            -- 優先順位: key2 > key4 > key1 > key5 > key3
            
            -- 1. key2 の判定
            if (currentTick >= CD_key2) then
                SendSkillTwice("2")
                CastEndTick = currentTick + Cast_key2
                CD_key2 = currentTick + CT_key2
                return
            end
            
            -- 2. key4 の判定
            if (currentTick >= CD_key4) then
                SendSkillTwice("4")
                CastEndTick = currentTick + Cast_key4
                CD_key4 = currentTick + CT_key4
                return
            end
            
            -- 3. key1 の判定
            if (currentTick >= CD_key1) then
                SendSkillTwice("1")
                CastEndTick = currentTick + Cast_key1
                CD_key1 = currentTick + CT_key1
                return
            end
            
            -- 4. key5 の判定
            if (currentTick >= CD_key5) then
                SendSkillTwice("5")
                CastEndTick = currentTick + Cast_key5
                CD_key5 = currentTick + CT_key5
                return
            end
            
            -- 5. key3 の判定
            if (currentTick >= CD_key3) then
                SendSkillTwice("3")
                CastEndTick = currentTick + Cast_key3
                CD_key3 = currentTick + CT_key3
                return
            end

            -- すべてがCT中の場合のフォールバック: key1
            SendSkillTwice("1")
            CastEndTick = currentTick + Cast_key1
            CD_key1 = currentTick + CT_key1
            return
        end

    end
end

--------------------------------------------------------------------------------
-- 補助関数
--------------------------------------------------------------------------------

function SendSkillTwice(key)
    PressKey(key)
    Sleep(36)
    ReleaseKey(key)
    Sleep(100)
    PressKey(key)
    Sleep(36)
    ReleaseKey(key)
    Sleep(100)
    PressKey(key)
    Sleep(36)
    ReleaseKey(key)
end